package com.tedu.api;

import org.testng.annotations.Test;

/**
 * 字符串大量拼接：注意String造成内存溢出
 */

public class StringBuliderAPI {
    @Test
    public void testString() {
        String str = "字符串";
        for (int i = 0; i < 100000000l; i++) {
            str += i;
            System.out.println(str);
        }
    }

    /**
     * String----不可改变    BUG（常量池）
     * 假设：拼接出10000000000000w个String--neicun【开销过大】
     * 操作系统发现内存空间越来越小，会去硬盘上开辟空间--程序，电脑会卡
     * <p>
     * 解决方案：不会创建新对象，原来对象实现拼接【添加，替换，插入】
     * StringBuilder对象   可变字符串对象
     * 语法StringBuilder sb=newStringBulider（"字符串"）；
     * <p>
     * c语言    变量    int a=malloc（4）；  开辟四个字节空间
     * a=1；
     * free（a）;        清理内存
     * 不会存在内存溢出
     * Java语言  变量      int a=1  内存开辟a空间
     */
    @Test
    public void testSB() {
        String str = "你就是我的";
        StringBuilder sb = new StringBuilder(str);
        sb.append("小可爱");
        System.out.println(sb);
    }
    /**
     * replace方法     替换  返回值：String
     * 作用：可以将字符串中指定范围内"内容"替换成给定的内容
     * 含头不含尾
     * replace（int start，intend，String str）
     * 开始位置        结束位置     替换内容
     *
     */
    @Test
    public void testReplace(){
        //创建StringBuilder可变字符串类，构造器中直接传字符串
        StringBuilder sb=new StringBuilder("你就是我的小可爱");
        sb=sb.replace(5,8,"小Baby");
        System.out.println(sb);
    }
    /**
     * insert方法   插入    返回值：String
     * 作用：将给定字符串
     */
    @Test
    public void testInsert(){
        StringBuffer sb=new StringBuffer("你就是我的小可爱");
                sb=sb.insert(0,"今天");
                System.out.println(sb);
    }
/**
 * StringBuilder和StringBuffer的区别？
 * StringBuilder和StringBuffer---方法完全一致【追加，替换，插入】
 * StringBuffer---JDK1.0----线程安全---效率低
 *
 * StringBuilder---JDK1.5---线程不安全--效率高
 *
 * 需要说明书：模块用什么累【标注】
 */
}









































